#                                 Dict 字典
# 一、构建
'''
# 1、使用字面值
# 使用字面值
# {'键':'值'}
sxt_dict={'name':'老王','sex':1,'address':'隔壁'}
print(sxt_dict)         #{'name': '老王', 'sex': 1, 'address': '隔壁'}
print(type(sxt_dict))   #<class 'dict'>
sxt_dict={'name':'老王','sex':1,'address':'隔壁','address':'松江'}#保证键唯一性，重复的键会被后面内容覆盖
print(sxt_dict)         #{'name': '老王', 'sex': 1, 'address': '松江'}
print("*"*50)
'''


'''
# 2、使用构造函数
sxt_dict=dict(name="xiaowang",age="18")
print(sxt_dict)       #{'name': 'xiaowang', 'age': '18'}
sxt_dict=dict([('shsxt1',1),('bj',2),('sh',3)])
print(sxt_dict)       #{'shsxt1': 1, 'bj': 2, 'sh': 3}
sxt_dict=dict(zip(["s","x","t"],[1,2,3]))
print(sxt_dict) 
print("*"*50)         #{'s': 1, 'x': 2, 't': 3}
'''


# 二、常用方法
'''
sxt_dict={'name': '老王', 'sex': 1,'address': '隔壁', 'address': '松江'}
# 1、增加相关
sxt_dict['no']=10
print(sxt_dict)             #{'name': '老王', 'sex': 1, 'address': '松江', 'no': 10}
sxt_dict={}.fromkeys(['a','b','c'],[1,2,3])
print(sxt_dict)             #{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
sxt_dict={}.fromkeys(['a','b','c'],None)
print(sxt_dict)             #{'a': None, 'b': None, 'c': None}
print("*"*50)
'''


'''
# 2、删除相关
# 删除相关
sxt_dict={'name': '老王', 'sex': 1, 'address': '松江', 'no': 10}
del sxt_dict['no']     #如果没有键，no会出现异常
print(sxt_dict)        #{'name': '老王', 'sex': 1, 'address': '松江'}
sxt_dict.pop('sex')    #成功返回1，如果没有key，默认错误
print(sxt_dict)        #{'name': '老王', 'address': '松江'}
sxt_dict.pop('sex',-1) #避免错误，返回-1
sxt_dict.popitem()     #随机删除
print(sxt_dict)        #{'name': '老王'}
print("*"*50)
'''


'''
# 3、更改相关
sxt_dict={'name': '老王', 'sex': 1, 'address': '松江', 'no': 10}
sxt_dict['name']='xiaowang' # 存在则覆盖，不存在新建
print(sxt_dict)             # {'name': 'xiaowang', 'sex': 1, 'address': '松江', 'no': 10}
sxt_dict.__setitem__('name','阿狗')
print("修改后的名称:",sxt_dict['name'])    #修改后的名称: 阿狗
print("*"*50)


sxt_dict={'name': '老王', 'sex': 1,'address': '隔壁', 'address': '松江' }
sxt_dict.update({1:'a','name':'b',3:'c'}) #所有键-值对添加到当前字典中，并覆盖同名键的值，有的则覆盖，没有的则添加
print(sxt_dict)      #{'name': 'b', 'sex': 1, 'address': '松江', 1: 'a', 3: 'c'}
print("*"*50)
'''


# 4、查询相关
#查询相关
sxt_dict={'name': '老王', 'sex': 1,'address': '隔壁', 'address': '松江' }
print('name' in sxt_dict)  #使用 in 查找是否存在    True
#如果if成立，返回if前面的，否则返回else后面的
print(sxt_dict['name1'] if 'name1' in sxt_dict else 'notexists') #三目运算符    notexists

print("姓名: ",sxt_dict['name'])   #[key] 没有key会出现异常           姓名:  老王
print("姓名: ",sxt_dict.get('name1'))  #没有key返回""                 姓名:  None
print("姓名: ",sxt_dict.get('gender','boy'))    #没有key返回"默认"    姓名:  boy
print("*"*50)


#获取所有的key和value，返回的是一个set集合
print("所有的key值：",sxt_dict.keys())        #所有的key值： dict_keys(['name', 'sex', 'address'])
print("所有的values值：",sxt_dict.values())   #所有的values值： dict_values(['老王', 1, '松江'])

#循环遍历获取所有内容
for k,v in sxt_dict.items():
    print("key值：",k,",value值：",v)    #key值： name ,value值： 老王
                                         #key值： sex ,value值： 1
                                         #key值： address ,value值： 松江



